package com.usemodj.forum;
import java.io.IOException;
import java.io.Reader;
import java.util.Arrays;
import java.util.Date;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.activation.DataHandler;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.util.ByteArrayDataSource;
import org.apache.ibatis.io.Resources;
import org.apache.log4j.Logger;
public class Utils {
private static Logger logger = Logger.getLogger( Utils.class);
public static String sanitizeUser(String username, boolean strict) {
//String rawUsername = username;
username = stripTags( username, "");
//Kill octets
username = username.replaceAll("%([a-fA-F0-9][a-fA-F0-9])", "");
username = username.replaceAll("&.+?;", ""); // Kill entities
if( strict)
username = username.replaceAll("(?i)[^a-z0-9 _.@-]", ""); // ignore case
//Consolidate contiguous whitespace
username = username.replaceAll("\\s+", " ");
return username;
}
public static String stripTags(String text, String allowedTags) {
String[] tag_list = allowedTags.split(",");
Arrays.sort(tag_list);
final Pattern p = Pattern.compile("<[/!]?([^\\\\s>]*)\\\\s*[^>]*>",
Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(text);
StringBuffer out = new StringBuffer();
int lastPos = 0;
while (m.find()) {
String tag = m.group(1);
// if tag not allowed: skip it
if (Arrays.binarySearch(tag_list, tag) < 0) {
out.append(text.substring(lastPos, m.start())).append(" ");
} else {
out.append(text.substring(lastPos, m.end()));
}
lastPos = m.end();
}
if (lastPos > 0) {
out.append(text.substring(lastPos));
return out.toString().trim();
} else {
return text;
}
}
public static void sendMail(String subject, String text, String to) throws IOException, MessagingException{
Properties props = new Properties();
Reader reader = Resources.getResourceAsReader("mail.properties");
props.load(reader);
//logger.debug("-- mail.properties mail.smtp.host: " + prop.getProperty("mail.smtp.host"));
String mailer = "sendhtml";
String from = props.getProperty("mail.smtp.from");
//Get a Session object
Session session = Session.getInstance(props, null);
// construct the message
Message msg = new MimeMessage(session);
if (from != null)
msg.setFrom( new InternetAddress(from.trim()));
else
msg.setFrom();
msg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse( to, false));
// if (cc != null)
// msg.setRecipients(Message.RecipientType.CC,
// InternetAddress.parse(cc, false));
// if (bcc != null)
// msg.setRecipients(Message.RecipientType.BCC,
// InternetAddress.parse(bcc, false));
msg.setSubject(subject);
collect(text, msg);
msg.setHeader("X-Mailer", mailer);
msg.setSentDate(new Date());
// send the thing off
Transport.send(msg);
System.out.println("\nMail was sent successfully.");
}
private static void collect(String text, Message msg) throws MessagingException, IOException {
String subject = msg.getSubject();
StringBuffer sb = new StringBuffer();
sb.append("<HTML>\n");
sb.append("<HEAD>\n");
sb.append("<TITLE>\n");
sb.append(subject + "\n");
sb.append("</TITLE>\n");
sb.append("</HEAD>\n");
sb.append("<BODY>\n");
sb.append("<H2>" + subject + "</H2>" + "\n");
sb.append( text);
sb.append("</BODY>\n");
sb.append("</HTML>\n");
msg.setDataHandler(new DataHandler(
new ByteArrayDataSource( sb.toString(), "text/html")));
}
}